package Previo;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;



public class InnerServer extends Thread{
	
	private Socket socket;
	private ObjectOutputStream output;
	private ObjectInputStream input;
	
	public InnerServer(Socket s){
		this.socket= s;
	}
	
	public void run (){
		try {
			this.input= new ObjectInputStream (this.socket.getInputStream());
			this.output = new ObjectOutputStream (this.socket.getOutputStream());
			recibir ();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

	private void recibir() {
		Requerimiento r = new Requerimiento ();
		try {
			System.out.println("ESTOY IMPRIMIENDO EL TIPO DE MENSAJE");
			System.out.println(r.getTipo());
			while (true){
				r = (Requerimiento)input.readObject();
				switch (r.getTipo()){
				case Requerimiento.CONECTAR:
					System.out.println("un cliente solicita conexion");
					enviarProcedures(); break;
				case Requerimiento.REQUERIR:
					System.out.println ("el cliente solicita un requerimiento");
					enviarRequerimiento(r); 
					System.out.println("TERMINO DE Enviar datos TABLA.");
					break;
				case Requerimiento.DESCONECTAR:
					if(!this.socket.isClosed()){
						System.out.println("MEQUIERO DESCONECTAR");
						System.out.println(r.getTipo());
						this.input.close();
						this.output.close();
						this.socket.close();
					} break;
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//recibirPeticion();
		
		
	}/*
	public void recibirPeticion (){
		try {
			
			this.r = reque;
		} catch (IOException e) {
    		e.printStackTrace();
    		System.exit(1);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}*/
	private void enviarRequerimiento(Requerimiento r) {
			//Requerimiento r;
			try {
				//r = (Requerimiento) input.readObject();
				ProcedimientosDAO pDAO = new ProcedimientosDAO ();
				String Procedure = r.getDato();
				int zona= r.getArgumentos()[0];
				int categoria = r.getArgumentos()[1];
				System.out.println("ACA MUESTRO EL PROCEDURE ELEGIDO");
				System.out.println(Procedure);
				Respuesta resp = new Respuesta ();
				resp.setTipo(Respuesta.CONSULTA);
				resp.setTitulos(pDAO.obtenerColumnas(Procedure, zona, categoria));
				resp.setDatos(pDAO.obtenerResultados(Procedure, zona, categoria));
				System.out.println("ACA MUESTRO LOS DATOS OBTENIDOS");
				//System.out.println (String.valueOf (resp.getDatos()));
				output.writeObject(resp);
				System.out.println("EL SERVIDOR RESPONDIO CON LOS DATOS!!!!!!!");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		
	}

	private void enviarProcedures() {
		try {
			ProcedimientosDAO pDAO = new ProcedimientosDAO ();
			Respuesta resp = new Respuesta ();
			resp.setTipo(Respuesta.PROCEDIMIENTOS);
			resp.setTitulos(pDAO.obtenerProcedures());
			output.writeObject(resp);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	

}
